package com.shujia.day09;

/*
    内部类：在一个类中定义一个类
        根据定义的位置不同，分为两种内部类
        成员内部类：将类定义在类中成员的位置【类中方法外】上
            常见修饰成员内部类的修饰词：
                private
                static
        局部内部类：


 */
//class Outer{
//    //成员方法
//    int a = 10;
//    //成员方法
//    public void show1(){
//        System.out.println(this.a);
//    }
//
//    //成员内部类
//    class Inner{
//        int a = 20;
//        public void fun1(){
//            int a = 30;
//            System.out.println(a); // 30
//            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
//        }
//    }
//}

class Outer{
    //成员方法
    int a = 10;
    //成员方法
    public void show1(){
        System.out.println(this.a);
    }

    //成员内部类
//    private class Inner{
//        int a = 20;
//        public void fun1(){
//            int a = 30;
//            System.out.println(a); // 30
//            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
//        }
//    }

    static class Inner{
        int a = 20;
        public void fun1(){
            int a = 30;
            System.out.println(a); // 30
            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
        }
    }

//    public void show2(){
//        Inner inner = new Inner();
//        inner.fun1();
//    }


}

public class InnerClassDemo1 {
    public static void main(String[] args) {
        //创建成员内部类对象
        //外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
//        Outer.Inner inner = new Outer().new Inner();
//        inner.fun1();

        //若成员内部类使用static修饰的话，可以直接使用外部类名获取内部类的构造方法进行创建
        Outer.Inner inner = new Outer.Inner();

    }
}
